package com.itheima.service;

import com.itheima.dao.UserMapper;
import com.itheima.pojo.PageBean;
import com.itheima.pojo.User;
import com.itheima.util.SessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserService {
    //创建一个方法,来获得所有用户数据,查询所有用户信息
    public List<User> findAllUsers() {
        SqlSession sqlSession = SessionFactoryUtils.getSession();
        //拿到代理类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //通过代理类对象调用接口的方法,f返回一个list集合
        return userMapper.findAllUsers();
    }


    //新增用户
    public int addUser(User user) {
        //判断传过来的用户是否为空 : 0 用户为空  1 添加成功  2 用户已存在
        if (user == null) {
            return 0;
        }
        String userage = user.getAge() + "";
        if (userage.equals("") || user.getName().equals("") || user.getSex().equals("")
                || user.getEmail().equals("") || user.getQq().equals("") || user.getAge() == 0) {
            return 0;
        }
        //获得会话对象
        SqlSession sqlSession = SessionFactoryUtils.getSession();

        //获得代理类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //查询用户是否存在
        User user1 = userMapper.findUserByName(user.getName());
        //判断用户是否存在
        if (user1 == null) {
            //没有查询到用户说明可以添加
            int result = userMapper.addUser(user);
            //判断结果是否大于0
            if (result > 0) {
                //提交事务
                sqlSession.commit();
                return 1;
            }
            //释放资源
            sqlSession.close();
        }
        //用户已存在了,所以没法添加,返回值为2
        return 2;
    }


    //修改用户信息 之回显数据
    public User showUser(Integer id) {
        //获取会话对象,在获取代理类对象,调用根据id查询用户的方法
        SqlSession sqlSession = SessionFactoryUtils.getSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //返回一个user对象
        return userMapper.findUserById(id);


    }

    //根据id修改用户信息
    public boolean updateUser(User user) {
        if (user == null) {
            return false;
        }
        //获得会话对象
        SqlSession sqlSession = SessionFactoryUtils.getSession();
        //通过getmapper方法获得代理类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        // User user1 = userMapper.findUserById(user.getId());
        //通过代理类对象调用方法,得到一个结果并判断该结果

        int result = userMapper.updateUser(user);
        //判断结果
        if (result > 0) {
            sqlSession.commit();
            return true;
        }

        sqlSession.close();
        return false;
    }


    //根据id删除用户,但是时逻辑删除,不是物理删除,数据库中还存在该用户
    public void deleteUser(Integer id) {
        SqlSession sqlSession = SessionFactoryUtils.getSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        int result = userMapper.updateToDeleteUserById(id);
        if (result > 0) {
            sqlSession.commit();
        }
        sqlSession.close();
    }

    /**
     * 功能: 分页查询
     */
    public PageBean<User> findUserByPage(String currentPage, String pageSize) {
        //创建空的pagebean对象
        PageBean<User> pageBean = new PageBean<User>();
        //将string类型转换为integer类型
        Integer current = Integer.valueOf(currentPage);
        Integer pagesize = Integer.valueOf(pageSize);

        //给pagebean对象赋值
        pageBean.setCurrentPage(current);
        pageBean.setPageSize(pagesize);

        //调用方法
        SqlSession sqlSession = SessionFactoryUtils.getSession();
        UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
        int totalCount = usermapper.findTotalCount();
        //将总记录数存储进对象中
        pageBean.setTotalCount(totalCount);
        //start值计算,开始的索引
        int start = (current - 1) * pagesize;

        //从dao层中拿到存放每页数据的集合
        List<User> page = usermapper.findPage(start, pagesize);
        //将集合存入对象中
        pageBean.setList(page);

        //计算总页码
        //利用三元运算拿到总页数
        int totalPage = totalCount % pagesize == 0 ? (totalCount / pagesize) : (totalCount / pagesize + 1);

        //将总页数放入pagebean对象中
        pageBean.setTotalPage(totalPage);

        return pageBean;
    }
}
